package jp.ac.u_tokyo.dch.view.front;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.commons.lang.xwork.StringUtils;

import jp.ac.u_tokyo.dch.model.db.FrontDisplayGroup;
import jp.ac.u_tokyo.dch.model.db.GroupItems;
/**
 * @version 1.1
 */
public class FrontTreeView {

	/**
	 * 分類
	 */
	private String addSort;
	/**
	 * 編集Index
	 */
	private String editIndex;
	/**
	 * 段階キーリスト
	 */
	private String stageFieldKeyList;
	/**
	 * ツリー設定ヘッダ情報
	 */
	private FrontDisplayGroup frontDisplayGroup;
	/**
	 * 作成機関の概要で選択したグループ情報
	 */
	private List<GroupItems> lv1Select;
	/**
	 * 目録データ概要で選択したグループ情報
	 */
	private List<GroupItems> lv2Select;
	/**
	 * 資料群全体で選択したグループ情報
	 */
	private List<GroupItems> lv3Select;
	/**
	 * サブフォンドで選択したグループ情報
	 */
	private List<GroupItems> lv4Select;
	/**
	 * シリーズで選択したグループ情報
	 */
	private List<GroupItems> lv5Select;
	/**
	 * アイテムで選択したグループ情報
	 */
	private List<GroupItems> lv6Select;
	/**
	 * カスタムで選択したグループ情報
	 */
	private List<GroupItems> customSelect;
	/**
	 * 選択した情報を保存するマップ
	 */
	private Map<String, GroupItems> dataMap;
	/**
	 *
	 * @return Flexから入力したフロント表示情報
	 */
	public Map<String, GroupItems> getDataMap() {
		return dataMap;
	}
	/**
	 *
	 * @param Flexから入力したフロント表示情報
	 */
	public void setDataMap(Map<String, GroupItems> dataMap) {
		this.dataMap = dataMap;
	}
	/**
	 *
	 * @return Flexから入力したフロント表示情報
	 */
	public List<GroupItems> getLv1Select() {
		return lv1Select;
	}
	/**
	 *
	 * @param Flexから入力したフロント表示情報
	 */
	public void setLv1Select(List<GroupItems> lv1Select) {
		this.lv1Select = lv1Select;
	}
	/**
	 *
	 * @return Flexから入力したフロント表示情報
	 */
	public List<GroupItems> getLv2Select() {
		return lv2Select;
	}
	/**
	 *
	 * @param Flexから入力したフロント表示情報
	 */
	public void setLv2Select(List<GroupItems> lv2Select) {
		this.lv2Select = lv2Select;
	}
	/**
	 *
	 * @return Flexから入力したフロント表示情報
	 */
	public List<GroupItems> getLv3Select() {
		return lv3Select;
	}
	/**
	 *
	 * @param Flexから入力したフロント表示情報
	 */
	public void setLv3Select(List<GroupItems> lv3Select) {
		this.lv3Select = lv3Select;
	}
	/**
	 *
	 * @return Flexから入力したフロント表示情報
	 */
	public List<GroupItems> getLv4Select() {
		return lv4Select;
	}
	/**
	 *
	 * @param Flexから入力したフロント表示情報
	 */
	public void setLv4Select(List<GroupItems> lv4Select) {
		this.lv4Select = lv4Select;
	}
	/**
	 *
	 * @return Flexから入力したフロント表示情報
	 */
	public List<GroupItems> getLv5Select() {
		return lv5Select;
	}
	/**
	 *
	 * @param Flexから入力したフロント表示情報
	 */
	public void setLv5Select(List<GroupItems> lv5Select) {
		this.lv5Select = lv5Select;
	}
	/**
	 *
	 * @return Flexから入力したフロント表示情報
	 */
	public List<GroupItems> getLv6Select() {
		return lv6Select;
	}
	/**
	 *
	 * @param Flexから入力したフロント表示情報
	 */
	public void setLv6Select(List<GroupItems> lv6Select) {
		this.lv6Select = lv6Select;
	}
	/**
	 *
	 * @return Flexから入力したフロント表示情報
	 */
	public List<GroupItems> getCustomSelect() {
		return customSelect;
	}
	/**
	 *
	 * @param Flexから入力したフロント表示情報
	 */
	public void setCustomSelect(List<GroupItems> customSelect) {
		this.customSelect = customSelect;
	}
	/**
	 *
	 * @return Flexから入力したフロント表示情報
	 */
	public FrontDisplayGroup getFrontDisplayGroup() {
		return frontDisplayGroup;
	}
	/**
	 *
	 * @param Flexから入力したフロント表示情報
	 */
	public void setFrontDisplayGroup(FrontDisplayGroup frontDisplayGroup) {
		this.frontDisplayGroup = frontDisplayGroup;
	}


	/**
	 * l1,l2,l3,l4,l5,l6
	 * @return 分類
	 */
	public String getAddSort() {
		return addSort;
	}
	/**
	 *
	 * @param addSort
	 */
	public void setAddSort(String addSort) {
		this.addSort = addSort;
	}
	/**
	 *
	 * @return
	 */
	public String getEditIndex() {
		return editIndex;
	}
	/**
	 *
	 * @param editIndex
	 */
	public void setEditIndex(String editIndex) {

		this.editIndex = editIndex;
	}
	/**
	 *
	 * @return
	 */
	public String getStageFieldKeyList() {
		return stageFieldKeyList;
	}
	/**
	 *
	 * @param stageFieldKeyList
	 */
	public void setStageFieldKeyList(String stageFieldKeyList) {
		this.stageFieldKeyList = stageFieldKeyList;
	}
	/**
	 * 入力した情報をマップ形式に保存する
	 */
	public void convertToMap() {


		Map<String, GroupItems> map = new HashMap<String, GroupItems>();

		insertDataToMap(map, lv1Select);
		insertDataToMap(map, lv2Select);
		insertDataToMap(map, lv3Select);
		insertDataToMap(map, lv4Select);
		insertDataToMap(map, lv5Select);
		insertDataToMap(map, lv6Select);
		insertDataToMap(map, customSelect);

		dataMap = map;
	}


	/**
	 * 入力した情報をマップ形式に挿入する
	 * @param map マップ
	 * @param list 入力したリスト
	 */
	private void insertDataToMap(Map<String, GroupItems> map, List<GroupItems> list) {

		if (list == null) {
			return;
		}

		for (GroupItems groupItem: list) {

			if (groupItem != null) {

				String fieldKey = groupItem.getTopFieldKey();

				if (StringUtils.isNotEmpty(fieldKey)) {
					map.put(fieldKey, groupItem);
				}


			}
		}

	}

	/**
	 * リストをマップに変換する
	 * @param list リスト
	 */
	public void setList(List<GroupItems> list) {

		Map<String, GroupItems> map = new HashMap<String, GroupItems>();
		dataMap = map;
		insertDataToMap(map, list);
	}

}
